﻿Imports System.IO
''' <summary>
''' Fichero que realiza la copia de seguridad y 
''' la restauración de la bd
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>
''' 
Public Class Fichero

    ''' <summary>
    ''' Método que se encarga de guardar todos el contenido de la bd 
    ''' en un fichero.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Guardar()
        Dim consultaResultadoJugadores As List(Of String)
        Dim consultaResultadoUsuarios As List(Of String)
        Dim consultaResultadoEquipos As List(Of String)
        Dim consultaResultadoFormado As List(Of String)
        Dim consultaResultadoPermisos As List(Of String)
        Dim consultaResultadoRoles As List(Of String)
        Dim consultaResultadoTener As List(Of String)

        Dim miBD = New BaseDatos()

        consultaResultadoPermisos = miBD.Consultar("Select * from Permisos", "Permisos")
        consultaResultadoRoles = miBD.Consultar("Select * from Roles", "Roles")
        consultaResultadoTener = miBD.Consultar("Select * from Tener", "Tener")
        consultaResultadoUsuarios = miBD.Consultar("Select * from Usuarios", "Usuarios")
        consultaResultadoFormado = miBD.Consultar("Select * from Formado", "Formado")
        consultaResultadoJugadores = miBD.Consultar("Select * from Jugadores", "Jugadores")
        consultaResultadoEquipos = miBD.Consultar("Select * from Equipos", "Equipos")


        Dim guardar As StreamWriter = New StreamWriter("Copia de seguridad.dat")


        guardar.WriteLine("[Permisos]")
        For Each R As String In consultaResultadoPermisos
            guardar.WriteLine(R)
        Next

        guardar.WriteLine("[Roles]")
        For Each S As String In consultaResultadoRoles
            guardar.WriteLine(S)
        Next

        guardar.WriteLine("[Tener]")
        For Each T As String In consultaResultadoTener
            guardar.WriteLine(T)
        Next

        guardar.WriteLine("[Usuarios]")
        For Each O As String In consultaResultadoUsuarios
            guardar.WriteLine(O)
        Next

        guardar.WriteLine("[Formado]")
        For Each Q As String In consultaResultadoFormado
            guardar.WriteLine(Q)
        Next

        guardar.WriteLine("[Jugadores]")
        For Each N As String In consultaResultadoJugadores
            guardar.WriteLine(N)
        Next

        guardar.WriteLine("[Equipos]")
        For Each P As String In consultaResultadoEquipos
            guardar.WriteLine(P)
        Next

        guardar.Close()
        MsgBox("Copia de seguridad realizada con éxito.")

    End Sub

    ''' <summary>
    ''' Método que realiza la restauración de la bd cogiendo
    ''' los datos de un fichero.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Restaurar()
        Dim miBD = New BaseDatos()

        'Borrar la base de datos
        miBD.InsertarModificarBorrar("DELETE * FROM Permisos")
        'miBD.InsertarModificarBorrar("DELETE * FROM Roles")
        miBD.InsertarModificarBorrar("DELETE * FROM Tener")
        'miBD.InsertarModificarBorrar("DELETE * FROM Usuarios")
        miBD.InsertarModificarBorrar("DELETE * FROM Formado")
        miBD.InsertarModificarBorrar("DELETE * FROM Jugadores")
        miBD.InsertarModificarBorrar("DELETE * FROM Equipos")



        Dim equipos As String() = New String(4) {}
        Dim formado As String() = New String(1) {}
        Dim jugadores As String() = New String(14) {}
        Dim permisos As String() = New String(1) {}
        Dim roles As String() = New String(1) {}
        Dim tener As String() = New String(2) {}
        Dim usuarios As String() = New String(8) {}

        Const fichero As String = "C:\Users\Reaper\Desktop\jd-arturo(finalBuena)\Campeonato\Campeonato\bin\Debug\Copia de seguridad.dat"
        Dim texto As String = ""

        If File.Exists(fichero) Then
            Dim reader As New System.IO.StreamReader(fichero)

            'Para saber si es la tabla permisos
            texto = reader.ReadLine()
            If texto = "[Permisos]" Then
                While texto <> "[Roles]"
                    texto = reader.ReadLine()
                    If texto <> "[Roles]" Then
                        permisos = texto.Split(CChar("-"))

                        miBD.InsertarModificarBorrar("INSERT INTO Permisos(Nombre, ID)  VALUES('" & permisos(0) & "'," & CInt(permisos(1)) & ")")

                    End If
                End While
            End If


            'Para saber si es la tabla roles
            texto = reader.ReadLine()
            If texto = "[Roles]" Then
                While texto <> "[Tener]"
                    texto = reader.ReadLine()
                    If texto <> "[Tener]" Then
                        roles = texto.Split(CChar("-"))

                        miBD.InsertarModificarBorrar("INSERT INTO Roles(Nombre, Id)  VALUES('" & roles(0) & "'," & CInt(roles(1)) & ")")

                    End If
                End While
            End If

            'Para saber si es la tabla tener
            texto = reader.ReadLine()
            If texto = "[Tener]" Then
                While texto <> "[Usuarios]"
                    texto = reader.ReadLine()
                    If texto <> "[Usuarios]" Then
                        tener = texto.Split(CChar("-"))

                        miBD.InsertarModificarBorrar("INSERT INTO Tener(IdRol, IdPermiso, Accesible)  VALUES(" & CInt(tener(0)) & "," & CInt(tener(1)) _
                                                     & "," & CBool(tener(2)) & ")")

                    End If
                End While
            End If


            'Para saber si es la tabla usuarios.
            texto = reader.ReadLine()
            If texto = "[Usuarios]" Then
                While texto <> "[Formado]"
                    texto = reader.ReadLine()
                    If texto <> "[Formado]" Then
                        usuarios = texto.Split(CChar("-"))

                        miBD.InsertarModificarBorrar("INSERT INTO Usuarios(DNI, Nombre, Apellidos, Telefono, Usuario, Contraseña, IdRol, Accesible, Id) VALUES('" _
                                         & usuarios(0) & "','" & usuarios(1) & "','" & usuarios(2) & "','" & usuarios(3) & _
                                         ",'" & usuarios(4) & "','" & usuarios(5) & "'," & CInt(usuarios(6)) & "," & CBool(usuarios(7)) & "," & CInt(usuarios(8)) & ")")
                    End If
                End While
            End If

            'Para saber si es la tabla formado
            texto = reader.ReadLine()
            If texto = "[Formado]" Then
                While texto <> "[Jugadores]"
                    texto = reader.ReadLine()
                    If texto <> "[Jugadores]" Then
                        formado = texto.Split(CChar("-"))

                        miBD.InsertarModificarBorrar("INSERT INTO Formado(IdEquipo, IdJugador) VALUES(" _
                                      & CInt(formado(0)) & "," & CInt(formado(1)) & ")")
                    End If
                End While
            End If


            'Para saber si es la tabla jugadores.
            texto = reader.ReadLine()
            If texto = "[Jugadores]" Then
                While texto <> "[Equipos]"
                    texto = reader.ReadLine()
                    If texto <> "[Equipos]" Then
                        jugadores = texto.Split(CChar("-"))

                        miBD.InsertarModificarBorrar("INSERT INTO Jugadores(NIF, Nombre, Apellidos, FechaNacimiento, Calle, Numero," & _
                        "Puerta, Localidad, Provincia, CorreoElectronico, Whatsapp, Facebook," & _
                        "Twitter, Accesible, Id)  VALUES('" & jugadores(0) & "','" & jugadores(1) & "','" & _
                        jugadores(2) & "'," & CDate(jugadores(3)) & ",'" & jugadores(4) & _
                        "'," & CInt(jugadores(5)) & ",'" & jugadores(6) & "','" & _
                        jugadores(7) & "','" & jugadores(8) & "','" & _
                        jugadores(9) & "'," & CBool(jugadores(10)) & ",'" & jugadores(11) & _
                        "','" & jugadores(12) & "'," & CBool(jugadores(13)) & "," & CInt(jugadores(14)) & ")")

                    End If
                End While
            End If

            'Para saber si es la tabla equipos.
            texto = reader.ReadLine()
            If texto = "[Equipos]" Then
                While texto <> ""
                    texto = reader.ReadLine()
                    If texto <> "" Then
                        equipos = texto.Split(CChar("-"))

                        miBD.InsertarModificarBorrar("INSERT INTO Equipos(NombreEquipo, IdJugadorCapitan, IdJugadorNormal, Accesible, Id) VALUES('" _
                                         & equipos(0) & "'," & CInt(equipos(1)) & "," & CInt(equipos(2)) & "," & CBool(equipos(3)) & _
                                         "," & CInt(equipos(4)) & ")")
                    End If
                End While
            End If


            reader.Close()
            MsgBox("Copia de seguridad retaurada con éxito.")
        Else
            MsgBox("No existe ninguna copia de seguridad.")
        End If

    End Sub
End Class
